﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static List<MensalistaXFranquiaVO> getMensalistaXFranquia(int idMensalista)
        {
            return getMensalistaXFranquia(idMensalista, null, null);
        }

        public static List<MensalistaXFranquiaVO> getMensalistaXFranquia(int idMensalista, DateTime? dataInicial, DateTime? dataFinal)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdFranquia, IdMensalista, DataIni, DataFim ");
            query.AppendLine("FROM mensalistaxfranquia ");
            query.AppendLine("WHERE IdMensalista = ?IdMensalista ");
            if (dataInicial != null && dataFinal != null)
                query.AppendLine("AND DataIni <= DATE(?dataFinal) AND DataFim >= DATE(?dataInicial) ");
            else if (dataInicial != null)
                query.AppendLine("AND DATE(?dataInicial) BETWEEN DataIni AND DataFim ");
            else if (dataFinal != null)
                query.AppendLine("AND DATE(?dataFinal) BETWEEN DataIni AND DataFim ");
            query.AppendLine("ORDER BY DataIni DESC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMensalista", idMensalista);
            if (dataInicial != null) cmd.Parameters.AddWithValue("?dataInicial", dataInicial.Value);
            if (dataFinal != null) cmd.Parameters.AddWithValue("?dataFinal", dataFinal.Value);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<MensalistaXFranquiaVO> listMensalistaXFranquiaVOs = new List<MensalistaXFranquiaVO>();

                while (reader.Read())
                {
                    MensalistaXFranquiaVO mensalistaXFranquiaVO = MensalistaXFranquiaVO.CreateMensalistaXFranquiaVO();
                    mensalistaXFranquiaVO.idFranquia = reader.GetInt32("IdFranquia");
                    mensalistaXFranquiaVO.idMensalista = reader.GetInt32("IdMensalista");
                    mensalistaXFranquiaVO.dataIni = reader.GetDateTime("DataIni");
                    mensalistaXFranquiaVO.dataFim = reader.GetDateTime("DataFim");

                    listMensalistaXFranquiaVOs.Add(mensalistaXFranquiaVO);
                }
                reader.Close();
                return listMensalistaXFranquiaVOs;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setMensalistaXFranquias(List<MensalistaXFranquiaVO> mensalistaXFranquiaVOs)
        {
            foreach (MensalistaXFranquiaVO mensalistaXFranquiaVO in mensalistaXFranquiaVOs)
            {
                setMensalistaXFranquia(mensalistaXFranquiaVO);
            }
        }
        public static void setMensalistaXFranquia(MensalistaXFranquiaVO mensalistaXFranquiaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE mensalistaxfranquia ");
            query.AppendLine("SET IdMensalista=?IdMensalista, DataIni=?DataIni, DataFim=?DataFim ");
            query.AppendLine("WHERE IdFranquia=?IdFranquia ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFranquia", mensalistaXFranquiaVO.idFranquia);
            cmd.Parameters.AddWithValue("?IdMensalista", mensalistaXFranquiaVO.idMensalista);
            cmd.Parameters.AddWithValue("?DataIni", mensalistaXFranquiaVO.dataIni);
            cmd.Parameters.AddWithValue("?DataFim", mensalistaXFranquiaVO.dataFim);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void newMensalistaXFranquias(List<MensalistaXFranquiaVO> mensalistaXFranquiaVOs)
        {
            foreach (MensalistaXFranquiaVO mensalistaXFranquiaVO in mensalistaXFranquiaVOs)
            {
                newMensalistaXFranquia(mensalistaXFranquiaVO);
            }
        }
        public static long newMensalistaXFranquia(MensalistaXFranquiaVO mensalistaXFranquiaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO mensalistaxfranquia ");
            query.AppendLine("SET IdMensalista=?IdMensalista, DataIni=?DataIni, DataFim=?DataFim ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMensalista", mensalistaXFranquiaVO.idMensalista);
            cmd.Parameters.AddWithValue("?DataIni", mensalistaXFranquiaVO.dataIni);
            cmd.Parameters.AddWithValue("?DataFim", mensalistaXFranquiaVO.dataFim);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delMensalistaXFranquias(List<MensalistaXFranquiaVO> mensalistaXFranquiaVOs)
        {
            foreach (MensalistaXFranquiaVO mensalistaXFranquiaVO in mensalistaXFranquiaVOs)
            {
                delMensalistaXFranquia(mensalistaXFranquiaVO);
            }
        }
        public static void delMensalistaXFranquia(MensalistaXFranquiaVO mensalistaXFranquiaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM mensalistaxfranquia ");
            query.AppendLine("WHERE IdFranquia=?IdFranquia ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFranquia", mensalistaXFranquiaVO.idFranquia);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
